package com.kexio.auth.annotation;

import com.kexio.auth.config.AuthAutoConfiguration;
import org.springframework.context.annotation.Import;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 启用Kexio权限框架注解
 * 
 * 使用此注解启动类上，自动装配权限管理相关组件：
 * - JWT认证过滤器
 * - 权限验证切面
 * - 数据权限拦截器
 * - 多级缓存服务
 * - 安全上下文管理
 * 
 * <pre>
 * &#64;SpringBootApplication
 * &#64;EnableKexioAuth
 * public class Application {
 *     public static void main(String[] args) {
 *         SpringApplication.run(Application.class, args);
 *     }
 * }
 * </pre>
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AuthAutoConfiguration.class)
public @interface EnableKexioAuth {
    
    /**
     * 是否启用多租户功能
     * 
     * @return true-启用多租户支持，false-单租户模式
     */
    boolean enableTenant() default false;
    
    /**
     * 是否启用事件机制
     * 
     * @return true-启用事件总线，false-直接失效缓存
     */
    boolean enableEvents() default false;
    
    /**
     * 是否启用L2缓存（Redis）
     * 
     * @return true-启用Redis作为L2缓存，false-仅使用L1缓存
     */
    boolean enableL2Cache() default false;
    
    /**
     * 是否启用审计日志
     * 
     * @return true-记录权限操作审计，false-不记录审计日志
     */
    boolean enableAudit() default true;
}
